package cn.smile.controller;

import cn.smile.pojo.User;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;

/**
 * 用户登录或注册
 */
@RestController
public class UserController {

    /**
     * 用户登录
     * cookie不能随便签署，只有用户与数据库进行成功校对之后才可以进行签署！
     *
     * @return
     */
    @RequestMapping("/login")
    public String login(User user, HttpServletResponse response) throws Exception {
        final String username = user.getUsername();
        final String password = user.getPassword();
        //分开检查用户名和密码是否为空
        if (user.getUsername() == null || user.getPassword() == null) {
            //如果为空直接返回
            return "用户名和密码不得为空！";
        }
        if ("maomao".equals(username) && "123123".equals(password)) {
            //创建jwt
            String jwtToken = Jwts.builder()
                    //该JWT面向的对象,也就是这个jwt是哪个用户的
                    .setSubject(user.getUsername())
                    //可以自定义，一般是用户的id
                    .claim("id", "18")
                    //JWT签署时间
                    .setIssuedAt(new Date())
                    //JWT使用的签名算法
                    .signWith(SignatureAlgorithm.HS256, "secretkey").compact();
            //将jwt信息存储至cookie中
            Cookie cookie = new Cookie("auth", jwtToken);
            //将cookie返回给浏览器
            response.addCookie(cookie);
            //返回jwt token
            return "登录成功！token：" + jwtToken;
        } else {
            return "登录失败，用户名或密码错误！";
        }
    }


}
